#include "Col.ph"
#ifdef __GNUG__
#pragma implementation
#endif

#include "Types.h"
#include "String.h"
#include "Class.h"
#include "Math.h"
#include "ET_stdio.h"

//---- _InitTermCnt ------------------------------------------------------------

extern void _InitModule(), _TermModule();

_InitTermCnt::_InitTermCnt()
{
	_InitModule();
}

_InitTermCnt::~_InitTermCnt()
{
	_TermModule();
}

//---- SimpleMetaImpls ---------------------------------------------------------

static void ShowString(char *bp, char *s, int l)
{
	int ll;

	if (l == -1)
		l= strlen(s);
	ll= Math::Min(l, 50);
	*bp++= '\"';
	for (int j= 0; j < ll; j++)
		bp= strquotechar(*s++, bp);
	*bp++= '\"';
	if (l > ll) {
		*bp++= '.'; *bp++= '.'; *bp++= '.';
	}
	*bp= '\0';
}

SimpleMetaImpl(char)
{
	if (!isptr) {
		*buf++= '\'';
		buf= strquotechar(*((char*) addr), buf);
		*buf++= '\'';
	} else
		ShowString(buf, (char*)addr, len);
}

SimpleMetaImpl(short)
{
	len= len;
	if (!isptr)
		sprintf(buf, "%d", *((short*) addr));
}

SimpleMetaImpl(int)
{
	len= len;
	if (!isptr)
		sprintf(buf, "%d", *((int*) addr));
}

SimpleMetaImpl(long)
{
	len= len;
	if (!isptr)
		sprintf(buf, "%d", *((long*) addr));
}

SimpleMetaImpl(float)
{
	len= len;
	if (!isptr)
		sprintf(buf, "%f", (double)(*((float*) addr)));
}

SimpleMetaImpl(double)
{
	len= len;
	if (!isptr)
		sprintf(buf, "%f", (double)(*((double*) addr)));
}

SimpleMetaImpl(byte)
{
	if (!isptr) {
		*buf++= '\'';
		buf= strquotechar(*((char*) addr), buf);
		*buf++= '\'';
	} else
		ShowString(buf, (char*)addr, len);
}

SimpleMetaImpl(u_short)
{
	len= len;
	if (!isptr)
		sprintf(buf, "%u", *((u_short*) addr));
}

SimpleMetaImpl(u_int)
{
	len= len;
	if (!isptr)
		sprintf(buf, "%u", *((u_int*) addr));
}

SimpleMetaImpl(u_long)
{
	len= len;
	if (!isptr)
		sprintf(buf, "%u", *((u_long*) addr));
}

_SimpleMetaImpl(_bool,bool)
{
	len= len;
	if (!isptr)
		sprintf(buf, "%s", *((bool*) addr) ? "true" : "false");
}

_SimpleMetaImpl(_flags,u_int)
{
	len= len;
	if (!isptr)
		sprintf(buf, "0x%x", *((u_int*) addr));
}

_SimpleMetaImpl(_enum,enum)
{
	len= len;
	if (!isptr)
		sprintf(buf, "0x%x", *((u_int*) addr));
}

